<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8" />

    <title>사원목록</title>
    
    <script language="JavaScript">
    // 클래스 정의, 생성자
    // 객체 생성시마다 함수도 메모리를 할당 받음, 메모리 낭비가 심함
    // 내부의 함수에서 지정된 변수는 회수가 안되는 경우가 있음 이를
    // 함수 폐쇄 즉 function 클로저라고 함
    function Sungjuk(name, kuk, eng, mat){
        this.name = name;
        this.kuk = kuk;
        this.eng = eng;
        this.mat = mat;

        this.tot = function(){
            return this.kuk+this.eng;
        }
        
        this.avg = function(tot){
            return tot/3;    
        }
        
    }

    </script>

  </head>
  <body>
  <H2>
  함수 클로저가 발생하는 클래스 선언<br><br>
  <script language="javascript">
  var sungjuk = new Sungjuk('진종오', 100, 90, 80);
  document.write("성명: " + sungjuk.name + "<br>");
  document.write("국어: " + sungjuk.kuk + "<br>");
  document.write("영어: " + sungjuk.eng + "<br>");
  document.write("수학: " + sungjuk.mat + "<br>");
  document.write("총점: " + sungjuk.tot() + "<br>");
  document.write("평균: " + parseInt(sungjuk.avg(sungjuk.tot())) + "<br>");

  var sungjuk2 = new Sungjuk('최민호', 60, 70, 40);
  document.write("성명: " + sungjuk.name + "<br>");
  document.write("국어: " + sungjuk2.kuk + "<br>");
  document.write("영어: " + sungjuk2.eng + "<br>");
  document.write("수학: " + sungjuk2.mat + "<br>");
  document.write("총점: " + sungjuk2.tot() + "<br>");
  document.write("평균: " + parseInt(sungjuk2.avg(sungjuk2.tot())) + "<br>");
  </script>
  
  
  </H2>
  
  </body>
</html>
